package com.atmilan.quartz.job;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;

import com.atmilan.quartz.constant.Constants;
import com.atmilan.quartz.constant.enums.SyncStatusEnum;
import com.atmilan.quartz.model.entity.crmeb.SystemConfig;
import com.atmilan.quartz.service.ISystemConfigService;
import com.atmilan.quartz.service.IUnibuySyncService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.xxl.job.core.handler.annotation.XxlJob;

import lombok.extern.slf4j.Slf4j;

/**
 * unibuy商品同步
 * @author daigb
 * @date:  2021-12-29 14:55
 */
@Slf4j
@Component
@Configuration
@EnableScheduling
public class UnibuySyncTask {
    @Autowired
    BaseTask baseTask;
    @Autowired
    IUnibuySyncService unibuySyncService;
    @Autowired
    ISystemConfigService systemConfigService;

    /**
     * 每60分钟同步unibuy商品源
     * @Description:  
     * @author daigb 
     * @param 
     * @return void
     * @throws
     */
    @XxlJob("unibuySyncTask")
    public void syncTask() {
        try {
            SystemConfig systemConfig = systemConfigService.getOne(Wrappers.<SystemConfig>lambdaQuery()
                    .eq(SystemConfig::getName, Constants.UNIBUY_SYNC_STATUS)
                    .last("LIMIT 1")
                    );
            SyncStatusEnum unibuySyncStatus = SyncStatusEnum.valueOf(systemConfig.getFormId());
            long timeDiff = new Date().getTime() - systemConfig.getUpdateTime().getTime();

            log.warn("--------------- 开始计划同步unibuy商品, 同步状态为: {} ---------------", unibuySyncStatus);
//            // 12小时内状态还未变更, 直接重新处理
//            if (SyncStatusEnum.WAIT == unibuySyncStatus && 12 < (timeDiff / 1000 / 60 / 60)) {
//                log.warn("--------------- unibuy商品同步过程超过12小时, 自动重新拉取数据 ---------------");
//                unibuySyncStatus = SyncStatusEnum.PUSH;
//            }
//            // 有同步任务时不进行处理
//            if (SyncStatusEnum.WAIT == unibuySyncStatus) {
//                log.warn("--------------- unibuy任务未结束, 新任务不执行 ---------------");
//                return;
//            }
            // 更新任务状态为同步中
            baseTask.updateSyscStatus(Constants.UNIBUY_SYNC_STATUS, SyncStatusEnum.WAIT, systemConfig);
            boolean result = unibuySyncService.syncProduct();
            if (result) {
                baseTask.updateSyscStatus(Constants.UNIBUY_SYNC_STATUS, SyncStatusEnum.SYNC, systemConfig);
                log.warn("--------------- unibuy商品拉取完成!!! ---------------");
            }
            // 下发完成, 需要同步
//            if (SyncStatusEnum.PUSH == unibuySyncStatus) {
//                boolean result = unibuySyncService.syncProduct();
//                if (result) {
//                	baseTask.updateSyscStatus(Constants.UNIBUY_SYNC_STATUS, SyncStatusEnum.SYNC, systemConfig);
//                    log.warn("--------------- unibuy商品拉取完成!!! ---------------");
//                }
//                // 同步完成, 需要下发
//            }
            // 不用等下发了，就这么点数据量直接爬取完了直接下发
//            else if (SyncStatusEnum.SYNC == unibuySyncStatus) {
//                boolean result = unibuySyncService.pushProduct();
//                if (result) {
//                	baseTask.updateSyscStatus(Constants.UNIBUY_SYNC_STATUS, SyncStatusEnum.PUSH, systemConfig);
//                    log.warn("--------------- unibuy商品下发完成!!! ---------------");
//                }
//            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
